package cn.elwy.rcp.ui.explorer.core;

import cn.elwy.osgi.config.ConfigContext;
import cn.elwy.rcp.ui.explorer.core.internal.SpringContext;

public class AppContext {

	private AppContext() {
	}

	public static <T> T getDao(String beanName, Class<T> clazz) {
		if (ConfigContext.isGetDaoByName()) {
			try {
				return SpringContext.getBean(ConfigContext.getDaoPrefix() + beanName);
			} catch (Exception e) {
				if ("".equals(ConfigContext.getDaoPrefix())) {
					return SpringContext.getBean(clazz);
				} else {
					try {
						return SpringContext.getBean(beanName);
					} catch (Exception e1) {
						return SpringContext.getBean(clazz);
					}
				}
			}
		} else {
			try {
				return SpringContext.getBean(clazz);
			} catch (Exception e) {
				return SpringContext.getBean(beanName);
			}
		}
	}

	public static <T> T getService(String beanName, Class<T> clazz) {
		if (ConfigContext.isGetServiceByName()) {
			try {
				return SpringContext.getBean(ConfigContext.getServicePrefix() + beanName);
			} catch (Exception e) {
				if ("".equals(ConfigContext.getDaoPrefix())) {
					return SpringContext.getBean(clazz);
				} else {
					try {
						return SpringContext.getBean(beanName);
					} catch (Exception e1) {
						return SpringContext.getBean(clazz);
					}
				}
			}
		} else {
			try {
				return SpringContext.getBean(clazz);
			} catch (Exception e) {
				return SpringContext.getBean(beanName);
			}
		}
	}

	public static <T> T getAudit(String beanName, Class<T> clazz) {
		try {
			return SpringContext.getBean(ConfigContext.getAuditPrefix() + beanName);
		} catch (Exception e) {
			if ("".equals(ConfigContext.getAuditPrefix())) {
				return SpringContext.getBean(clazz);
			} else {
				try {
					return SpringContext.getBean(beanName);
				} catch (Exception e1) {
					return SpringContext.getBean(clazz);
				}
			}
		}
	}

	public static <T> T getBean(String beanName) {
		return SpringContext.getBean(beanName);
	}

	public static <T> T getBean(Class<T> clazz) {
		return SpringContext.getBean(clazz);
	}

	public static <T> T getBean(String beanName, Class<T> clazz) {
		try {
			return SpringContext.getBean(beanName);
		} catch (Exception e) {
			return SpringContext.getBean(clazz);
		}
	}

}
